home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / p_man / cat5 / ipa.z / ipa
Encoding:
Text File  |  1998-10-30  |  41.3 KB  |  793 lines

  1.  
  2.  
  3.  
  4. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      IPA - Inter-Procedural Analysis
  10.  
  11. TTTTOOOOPPPPIIIICCCC
  12.      This man page describes the function of IPA (Inter-Procedural Analysis)
  13.      in the MIPSpro compilers and how to get maximal benefit from using it.
  14.      It is divided into 3 sections:
  15.  
  16.      _W_h_a_t _I_s _I_P_A?
  17.  
  18.      _H_o_w _D_o_e_s _I_P_A _A_f_f_e_c_t _t_h_e _C_o_m_p_i_l_a_t_i_o_n _P_r_o_c_e_s_s?
  19.  
  20.      _I_P_A _O_p_t_i_o_n_s
  21.  
  22.  
  23. WWWWhhhhaaaatttt IIIIssss IIIIPPPPAAAA????
  24.      Most compiler optimizations work within a single procedure (function,
  25.      subroutine, etc.) at a time.  This helps keep the problems manageable,
  26.      and is a key aspect of supporting separate compilation, because it allows
  27.      the compiler to restrict attention to the current source file.
  28.  
  29.      However, this intra-procedural focus also presents serious restrictions.
  30.      By avoiding dependence on information from other procedures, an optimizer
  31.      is forced to make worst-case assumptions about the possible effects of
  32.      those procedures.  For instance, at boundary points including all
  33.      procedure calls, it must typically save (and/or restore) the state of all
  34.      variables to (from) memory.
  35.  
  36.      By contrast, inter-procedural analysis algorithms analyze more than a
  37.      single procedure - preferably the entire program - at once.  The
  38.      optimizations performed by the MIPSpro compilers' IPA facility include:
  39.  
  40.          _I_n_l_i_n_i_n_g:  Calls to a procedure are replaced by a suitably modified
  41.          copy of the called procedure's body inline, even if the callee is in
  42.          a different source file.
  43.  
  44.  
  45.          _C_o_m_m_o_n _b_l_o_c_k _a_r_r_a_y _p_a_d_d_i_n_g:  Global arrays in Fortran may be padded,
  46.          i.e. their size increased in order to reduce cache conflicts
  47.  
  48.          _C_o_n_s_t_a_n_t _p_r_o_p_a_g_a_t_i_o_n:  Formal parameters which always have a
  49.          particular constant value can be replaced by the constant, allowing
  50.          additional optimization.  Global variables which are initialized to
  51.          constant values and never modified can be replaced by the constant.
  52.  
  53.          _D_e_a_d _f_u_n_c_t_i_o_n _e_l_i_m_i_n_a_t_i_o_n:  Functions which are never called can be
  54.          removed from the program image, improving memory utilization.
  55.  
  56.          _D_e_a_d _v_a_r_i_a_b_l_e _e_l_i_m_i_n_a_t_i_o_n:  Variables which are never actually used
  57.          can be eliminated, along with any code that initializes them.
  58.  
  59.          _G_l_o_b_a_l _n_a_m_e _o_p_t_i_m_i_z_a_t_i_o_n_s:  Global names in shared code must normally
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  71.  
  72.  
  73.  
  74.          be referenced via addresses in a global table, in case they are
  75.          defined or preempted by another DSO (see ddddssssoooo((((5555))))).  If the compiler
  76.          knows it is compiling a main program and that the name is defined in
  77.          another of the source files comprising the main program, an absolute
  78.          reference can be substituted, eliminating a memory reference.  For
  79.          example, code to load X which looked like
  80.                  lw $4,%got_disp(X),$gp
  81.                  ld $5,0,$4
  82.          might turn into
  83.                  lui $4,%hi(X)
  84.                  ld $5,%lo(X),$4
  85.          Similarly, IPA can optimize the data items which can be referenced by
  86.          simple offsets from the GP register instead of depending on the user
  87.          to provide an ideal value of the -G option (see cccccccc((((1111)))) or ffff77777777((((1111))))).
  88.  
  89.  
  90.  
  91.  
  92. HHHHoooowwww DDDDooooeeeessss IIIIPPPPAAAA AAAAffffffffeeeecccctttt tttthhhheeee CCCCoooommmmppppiiiillllaaaattttiiiioooonnnn????
  93.      Because IPA must usually deal with code from multiple source files to be
  94.      effective, it has significant effects on compilation.  These can be
  95.      classified as affecting either the program build process itself, or the
  96.      attributes of the resulting program.
  97.  
  98.    TTTThhhheeee BBBBuuuuiiiilllldddd PPPPrrrroooocccceeeessssssss
  99.      The standard Unix C or Fortran compilation model involves two steps.
  100.      First, each source file comprising a program is compiled independently of
  101.      the others, producing a relocatable _o_b_j_e_c_t file with the ".o" extension.
  102.      Then, the resulting object files are linked, along with any standard
  103.      libraries, by lllldddd((((1111)))).
  104.  
  105.      IPA works by postponing much of the compilation process until the link
  106.      step, when all of the program components can be analyzed together.
  107.      Specifically:
  108.  
  109.          The compile step does initial processing of the source file, placing
  110.          an intermediate representation of the procedures it contains into the
  111.          output .o file instead of normal relocatable code.  Such object files
  112.          are called _W_H_I_R_L _o_b_j_e_c_t_s to distinguish them from normal relocatable
  113.          object files.  This choice is invoked by the ----IIIIPPPPAAAA:::: option group.
  114.          This processing is really two phases:  the normal front end language
  115.          processing, plus an IPA summary phase which collects local
  116.          information which will be used by IPA later.  Since most back end
  117.          (optimization and code generation) options are transmitted via the
  118.          IPA summary phase, they must be present on the command line for the
  119.          compile step.
  120.  
  121.          The link step, although it is still invoked by a single ld(1)
  122.          command, becomes several steps.  First, the linker invokes IPA, which
  123.          analyzes and transforms all of the input WHIRL objects together,
  124.          writing modified versions of the objects.  Then it invokes the
  125.          compiler back end on each of the modified objects, producing a normal
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  137.  
  138.  
  139.  
  140.          relocatable object.  Finally, it invokes the linker again for a
  141.          normal linkage step, producing an executable program or DSO.
  142.  
  143.          The temporary files created during this expanded link step are all
  144.          created in a temporary subdirectory of the output program's
  145.          directory, unless the environment variable TTTTMMMMPPPPDDDDIIIIRRRR is specified, then
  146.          the temporary subdirectory will be created under MMMMPPPPDDDDIIIIRRRR;;;; like other
  147.          temporary files produced by the compilation process, they are
  148.          normally removed on completion (unless the -keep option is
  149.          specified).
  150.  
  151.      IPA does increase program build time in two ways.  First, although the
  152.      IPA step may not be very expensive itself, it usually increases the size
  153.      of the code by inlining, and therefore expands the time required by the
  154.      rest of the compiler.  More importantly, since IPA analysis can propagate
  155.      information from one module into optimization decisions in arbitrary
  156.      other modules, even minor changes to a single component module will cause
  157.      most of the program compilation to be redone.  As a result, IPA is best
  158.      suited for use on programs with a stable source base.
  159.  
  160.      Because full IPA is not always suitable, the MIPSpro compilers also
  161.      support inlining without IPA in cases where both the call and the called
  162.      subprogram are in the same file.  This feature, called the _s_t_a_n_d_a_l_o_n_e
  163.      _i_n_l_i_n_e_r, is invoked by default when inlining is specified in C++, or may
  164.      be explicitly invoked using the ----IIIINNNNLLLLIIIINNNNEEEE group options below.
  165.  
  166.    PPPPrrrrooooggggrrrraaaammmm AAAAttttttttrrrriiiibbbbuuuutttteeeessss
  167.      Like most optimization performed by the compiler, IPA should not change
  168.      the program's behavior.  Nevertheless, it can affect the resulting
  169.      program in subtle ways.
  170.  
  171.      The most important involve external symbols and DSOs (see ddddssssoooo((((5555))))).
  172.      Unlike other IPA implementations, the MIPSpro compiler does not require
  173.      that all of the components of a program be subjected to IPA analysis.
  174.      The lllldddd((((1111)))) command which invokes IPA may include object files (.o) and
  175.      archives (.a) which have been compiled normally without IPA analysis, as
  176.      well as referencing DSOs which, however they were compiled, cannot
  177.      contribute detailed information because the DSO may be replaced with a
  178.      different implementation after the program is built.
  179.  
  180.      In order to analyze the program's use (and non-use) of variables, IPA
  181.      must determine what those unanalyzed objects might reference.  It does so
  182.      by looking at their external symbol references.  If an external symbol is
  183.      never referenced by one of the unanalyzed objects, and its address is
  184.      never taken in the code being analyzed, IPA can assume that the only
  185.      possible way for the unanalyzed code to access the named object is if it
  186.      passed as a parameter to an unanalyzed subprogram.  Otherwise, it must
  187.      make worst-case assumptions.
  188.  
  189.      This approach is safe for normal relocatable objects and archives, since
  190.      they cannot be changed without rebuilding (and reanalyzing) the program.
  191.      For DSOs, however, there is a danger that a modified version will make
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  203.  
  204.  
  205.  
  206.      additional references.  To prevent this from causing changed program
  207.      behavior, IPA changes all of the external symbols which it assumes to be
  208.      unreferenced to export class HIDDEN or INTERNAL, which prevents them from
  209.      being referenced inadvertently by a future version of the DSO.  So the
  210.      DSO case is safe as well.
  211.  
  212.      The DSO treatment does have an important side effect, though.  All
  213.      referenced DSOs should be referenced on the lllldddd((((1111)))) command line.
  214.      Otherwise, their external references will not be seen by IPA, and the
  215.      symbols they require may not be visible at runtime, causing failure.  If
  216.      you cannot give references to all DSOs used (for example because you will
  217.      be accessing them with ddddllllooooppppeeeennnn((((3333)))) and don't want them automatically loaded
  218.      with your program), then you must provide an explicit exported symbol
  219.      list with the lllldddd((((1111)))) options ----eeeexxxxppppoooorrrrtttteeeedddd____ssssyyyymmmmbbbboooollll or ----eeeexxxxppppoooorrrrttttssss____ffffiiiilllleeee.  Please
  220.      read the ddddssssoooo((((5555)))) man page for a better understanding of DSO issues.
  221.  
  222.  
  223.  
  224. IIIIPPPPAAAA OOOOppppttttiiiioooonnnnssss
  225.      IPA is controlled from the command line with two option groups.
  226.      ----IIIINNNNLLLLIIIINNNNEEEE::::...  controls inlining by the standalone inliner.  It should be
  227.      used on your compile command line.  ----IIIIPPPPAAAA::::...  controls general IPA
  228.      choices.  If you use separate compile and link steps (i.e. using -c when
  229.      you compile and then linking the .o files produced with a separate cccccccc((((1111)))),
  230.      ffff77777777((((1111)))), or lllldddd((((1111)))) command), then you need to use ----IIIIPPPPAAAA for the compile
  231.      step, with or without individual options described below, and also for
  232.      the link step with any of the following options desired.
  233.  
  234.      As described in the cccccccc((((1111)))) and ffff77777777((((1111)))) man pages, the command line format
  235.      used for group options is
  236.  
  237.           -groupname:option[=value][:opt2[=val2]]...
  238.  
  239.      Thus, the group name is followed by a colon-separated list of options,
  240.      each of which is an option name possibly followed by an equal sign and a
  241.      value.  The option names may generally be abbreviated by truncating them
  242.      to a unique prefix (which may change when new options are added to the
  243.      group).
  244.  
  245.      The IPA option groups are:
  246.  
  247.      ----IIIINNNNLLLLIIIINNNNEEEE::::...
  248.              Standalone inliner option group: control the application of
  249.              subroutine inlining done by the standalone inliner, or by the
  250.              main inliner if ----IIIIPPPPAAAA options are enabled.  Normally, the calls to
  251.              be replaced by an inlined copy of the called subprogram are
  252.              chosen by heuristics internal to the inliner.  Most of the
  253.              options in this group provide control over those choices.  The
  254.              individual controls in this group are:
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  269.  
  270.  
  271.  
  272.              ====(OOOONNNN|OOOOFFFFFFFF)
  273.                  Enable/disable inlining (e.g.  ----IIIINNNNLLLLIIIINNNNEEEE::::====OOOOFFFFFFFF disables
  274.                  inlining).  Forcibly turn on or off stand-alone inline
  275.                  processing; ignored with a warning for compiles which invoke
  276.                  main IPA processing.  When both are seen in the command line
  277.                  (for a compile which will not invoke main IPA processing),
  278.                  "=OFF" is processed and "=ON" is overridden with a warning.
  279.                  If used within a specfile read by the stand-alone inliner,
  280.                  "=OFF" will skip inline processing within the stand-alone
  281.                  inliner and "=ON" is ignored with a warning.
  282.  
  283.              aaaallllllll Change the default inlining heuristic.  Attempt to inline all
  284.                  routines which are not excluded by a nnnneeeevvvveeeerrrr option or a pragma
  285.                  suppressing inlining, either for the routine or for a
  286.                  specific callsite.  This option conflicts with nnnnoooonnnneeee; aaaallllllll
  287.                  takes precedence if both are specified. Note, this option may
  288.                  cause performance problems since the size of the procedures
  289.                  may be very large after inlining. If the user must use this
  290.                  option then s/he may want to increase the Olimit, by using
  291.                  the option ----OOOOPPPPTTTT::::OOOOlllliiiimmmmiiiitttt====<<<<nnnnuuuummmmbbbbeeeerrrr>>>> (see cccccccc((((1111)))) or ffff77777777((((1111)))) ) to
  292.                  enable procedures to be optimized. This will however, be at
  293.                  the cost of increased compilation speed.
  294.  
  295.              ddddffffeeee[====(OOOONNNN||||OOOOFFFFFFFF)]
  296.                  Perform dead function elimination in the standalone inliner.
  297.                  Remove any functions that are inlined everywhere they are
  298.                  called and are not visible outside the current module
  299.                  (default TRUE for C++ not compiled with ----gggg, FALSE otherwise).
  300.  
  301.              ssssttttaaaattttiiiicccc[====(OOOONNNN||||OOOOFFFFFFFF)]
  302.                  Perform inlining of static functions in the standalone
  303.                  inliner.  (default TRUE for C, C++ at
  304.                  ----OOOO2222andhhhhiiiigggghhhheeeerrrroptimizationlllleeeevvvveeeellllssss, FALSE otherwise).
  305.  
  306.              aaaallllllllooooccccaaaa[====(OOOONNNN||||OOOOFFFFFFFF)]
  307.                  Enable save/restore of stack when inlining calls with alloca.
  308.                  If the callee has an alloca then inlining it would normally
  309.                  remove the function boundary at which the dynamic space would
  310.                  have been released.  This option saves and restores the stack
  311.                  pointer before and after the inlined code. Having the option
  312.                  ON is essential for correctness eg in code where the callee
  313.                  is inside a loop; (default TRUE).
  314.  
  315.              kkkkeeeeeeeepppp____ppppuuuu____oooorrrrddddeeeerrrr[====(OOOONNNN||||OOOOFFFFFFFF)]
  316.                  Preserve source subprogram ordering (default FALSE).
  317.  
  318.              pppprrrreeeeeeeemmmmpppptttt[====(OOOONNNN||||OOOOFFFFFFFF)]
  319.                  Enable inlining of functions marked preemptible in the
  320.                  standalone inliner (default FALSE). Such inlining  prevents
  321.                  another definition of such a function in another dso from
  322.                  pre-empting the definition of the function being inlined.
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  335.  
  336.  
  337.  
  338.              lllliiiisssstttt[====(OOOONNNN||||OOOOFFFFFFFF)]
  339.                  List inlining actions as they occur to stderr (default
  340.                  FALSE).
  341.  
  342.              mmmmuuuusssstttt====_n_a_m_e_1{,_n_a_m_e_2...}
  343.                  Independent of the default inlining heuristic, always attempt
  344.                  to inline any routines with names _n_a_m_e_1, _n_a_m_e_2,...  For C++,
  345.                  the names given must be the mangled names (see NOTES below).
  346.                  For Fortran, the name given may be either the original name,
  347.                  or the external name with the '_' appended by the compiler.
  348.                  In all cases, the option applies to any and all routines
  349.                  encountered with the given name, whether static or extern.  A
  350.                  pragma suppressing inlining at a particular callsite takes
  351.                  precedence over this option.
  352.  
  353.              nnnneeeevvvveeeerrrr====_n_a_m_e_1{,_n_a_m_e_2...}
  354.                  Independent of the default inlining heuristic, never attempt
  355.                  to inline any routines with names _n_a_m_e_1, _n_a_m_e_2,...  For C++,
  356.                  the names given must be the mangled names (see NOTES below).
  357.                  For Fortran, the name given may be either the original name,
  358.                  or the external name with the '_' appended by the compiler.
  359.                  In all cases, the option applies to any and all routines
  360.                  encountered with the given name, whether static or extern.  A
  361.                  pragma requesting inlining at a particular callsite takes
  362.                  precedence over this option.
  363.  
  364.              nnnnoooonnnneeee
  365.                  Change the default inlining heuristic.  Do not attempt to
  366.                  inline any routines which are not specified by a mmmmuuuusssstttt option
  367.                  or a pragma requesting inlining, either for the routine or
  368.                  for a specific callsite.  This option conflicts with aaaallllllll; aaaallllllll
  369.                  takes precedence if both are specified.
  370.  
  371.              ffffiiiilllleeee====ffffiiiilllleeeennnnaaaammmmeeee
  372.                  Provides cross-file inlining from within the standalone
  373.                  inliner. The option searches for routines provided via a
  374.                  ----IIIINNNNLLLLIIIINNNNEEEE::::mmmmuuuusssstttt list option, in the file specified in the
  375.                  ----IIIINNNNLLLLIIIINNNNEEEE::::ffffiiiilllleeee option. The file provided by this option must be
  376.                  generated using the -IPA -c options. The file generated
  377.                  contains information used to perform cross file inlining. For
  378.                  example, suppose two files exist:  foo.f and bar.f. The file,
  379.                  foo.f looks like this:
  380.                      program main
  381.                       ...
  382.                      call bar()
  383.                      end
  384.  
  385.                  the file, bar.f looks like:
  386.                      subroutine bar()
  387.                       ...
  388.                      end
  389.  
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  401.  
  402.  
  403.  
  404.                  To inline bar into main, using the standalone inliner,
  405.                  compile bar.f in the following way:
  406.                  ffff77777777 ----nnnn33332222 ----IIIIPPPPAAAA ----cccc bbbbaaaarrrr....ffff
  407.  
  408.                  This produces the file, bar.o. To inline bar into foo.f, use:
  409.                  ffff77777777 ----nnnn33332222 ffffoooooooo....ffff ----IIIINNNNLLLLIIIINNNNEEEE::::mmmmuuuusssstttt====bbbbaaaarrrr____::::ffffiiiilllleeee====bbbbaaaarrrr....oooo
  410.  
  411.              lllliiiibbbbrrrraaaarrrryyyy====AAAArrrrcccchhhhiiiivvvveeeeLLLLiiiibbbbrrrraaaarrrryyyyNNNNaaaammmmeeee
  412.                  Identify archive libraries where inliner should search for
  413.                  subprograms.  This option is similar to
  414.                  ----IIIINNNNLLLLIIIINNNNEEEE::::ffffiiiilllleeee==== option where the files (.o) in the archived
  415.                  library (.a) must have been generated using the -IPA -c
  416.                  options.  For example,  if function foo is defined in
  417.                  foofile.f which has been compiled with -IPA -c and
  418.                  transformed into an archive via
  419.                  aaaarrrr rrrrvvvv ffffoooooooolllliiiibbbb....aaaa ffffooooooooffffiiiilllleeee....oooo
  420.                  cccccccc ----nnnn33332222 ----IIIINNNNLLLLIIIINNNNEEEE::::mmmmuuuusssstttt====ffffoooooooo::::lllliiiibbbbrrrraaaarrrryyyy====ffffoooooooolllliiiibbbb....aaaa bbbbaaaarrrr....cccc would inline
  421.                  the function foo from foofile.o (which is automatically
  422.                  extracted from foolib.a) into bar.c via the crossfile
  423.                  inlining mechanism described above.
  424.  
  425.              mmmmaaaaxxxx____ppppuuuu____ssssiiiizzzzeeee____iiiinnnnlllliiiinnnneeee[====(nnnnnnnnnnnnnnnn)]
  426.                  Limit size of inlined subprograms to nnnn  (default is 5000).
  427.                  Inlining is disabled if after inlining the caller exceeds
  428.                  this size.
  429.  
  430.              ssssppppeeeeccccffffiiiilllleeee====_f_i_l_e_n_a_m_e
  431.                  Open _f_i_l_e_n_a_m_e to read additional options.  The specification
  432.                  file contains zero or more lines with inliner options in the
  433.                  form expected on the command line.  For instance, it might
  434.                  contain a single line like:
  435.                          -INLINE:never=errfunc:must=accessor,solver
  436.                  or, multiple lines like:
  437.                          -INLINE:all
  438.                          -INLINE:never=errfunc
  439.                  The ssssppppeeeeccccffffiiiilllleeee option cannot occur in a specification file, so
  440.                  specification files cannot invoke other specification files.
  441.  
  442.      ----IIIIPPPPAAAA::::...
  443.              IPA option group:  control the interprocedural analyses and
  444.              transformations performed.  Note that giving just the group name
  445.              without any options, i.e.  ----IIIIPPPPAAAA, will invoke IPA with the default
  446.              settings.  The individual controls in this group are:
  447.  
  448.              aaaaddddddddrrrreeeessssssssiiiinnnngggg[====(OOOONNNN||||OOOOFFFFFFFF)]
  449.                  Enable/disable the analysis of address operator usage.
  450.                  ----IIIIPPPPAAAA::::aaaalllliiiiaaaassss====OOOONNNN is a prerequisite.  (Default OOOOFFFFFFFF.)
  451.  
  452.              aaaaggggggggrrrr____ccccpppprrrroooopppp[====(OOOONNNN||||OOOOFFFFFFFF)]
  453.                  Enable/disable aggressive interprocedural constant
  454.                  propagation.  Attempt to avoid passing constant parameters,
  455.                  replacing the corresponding formal parameters by the constant
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  467.  
  468.  
  469.  
  470.                  values.  By default, less aggressive interprocedural constant
  471.                  propagation is done (default OOOOFFFFFFFF).
  472.  
  473.              aaaalllliiiiaaaassss[====(OOOONNNN||||OOOOFFFFFFFF)]
  474.                  Enable/disable alias/mod/ref analysis (default OOOOFFFFFFFF.
  475.  
  476.              aaaauuuuttttooooggggnnnnuuuummmm[====(OOOONNNN||||OOOOFFFFFFFF)]
  477.                  Determine the optimal value of the ----GGGG_n_u_m option, i.e.
  478.                  identify a size bound below which data can be allocated
  479.                  relative to the global pointer and accessed cheaply.  This
  480.                  optimization is turned off when ----mmmmuuuullllttttiiiiggggooootttt is specified in the
  481.                  linker command line.  (default OOOONNNN.  See also ----IIIIPPPPAAAA::::GGGGnnnnuuuummmm).
  482.  
  483.              GGGGnnnnuuuummmm=nnnn
  484.                  User specified G num (default is no limit).
  485.  
  486.              GGGGssssppppaaaacccceeee=nnnn
  487.                  User specified size (in bytes) for the area where IPA can
  488.                  allocate data that can be referenced relative to the global
  489.                  pointer.  (default 64K bytes, which is the maximum valid
  490.                  value).
  491.  
  492.              ccccggggiiii[====(OOOONNNN||||OOOOFFFFFFFF)]
  493.                  Enable/disable constant global variable identification, i.e.
  494.                  mark non-scalar global variables which are never modified as
  495.                  constant, and propagate their constant values to all files
  496.                  (default OOOONNNN).
  497.  
  498.              ccccpppprrrroooopppp[====(OOOONNNN||||OOOOFFFFFFFF)]
  499.                  Enable/disable interprocedural constant propagation, i.e.
  500.                  identify formal parameters which always have a specific
  501.                  constant value (default OOOONNNN - see also ----IIIIPPPPAAAA::::aaaaggggggggrrrr____ccccpppprrrroooopppp).
  502.  
  503.              ddddeeeepppptttthhhh====_n
  504.                  Identical to mmmmaaaaxxxxddddeeeepppptttthhhh====_n.
  505.  
  506.              ddddffffeeee[====(OOOONNNN||||OOOOFFFFFFFF)]
  507.                  Enable/disable dead function elimination, i.e. removal of
  508.                  subprograms which are never called from the program (default
  509.                  OOOONNNN).
  510.  
  511.              ddddvvvveeee[====(OOOONNNN||||OOOOFFFFFFFF)]
  512.                  Enable/disable dead variable elimination, i.e. removal of
  513.                  variables which are never referenced from the program
  514.                  (default OOOONNNN).
  515.  
  516.              eeeecccchhhhoooo[====(OOOONNNN||||OOOOFFFFFFFF)]
  517.                  Echo (to stderr) the back end compile commands and the final
  518.                  link command which are invoked from IPA.  This can help
  519.                  monitor progress of a large system build (default OOOOFFFFFFFF).
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                                                         PPPPaaaaggggeeee 8888
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  533.  
  534.  
  535.  
  536.              ffffoooorrrrcccceeeeddddeeeepppptttthhhh====_n
  537.                  Instead of the default inlining heuristics, attempt to inline
  538.                  all functions at a depth of at most _n in the callgraph, where
  539.                  functions which make no calls are at depth 0, those which
  540.                  call only depth 0 functions are at depth 1, and so on.
  541.                  Ignore the default heuristic limits on inlining.  (See also
  542.                  mmmmaaaaxxxxddddeeeepppptttthhhh.)
  543.  
  544.              lllliiiinnnneeeeaaaarrrr[=((((_O_N|_O_F_F))))]]]]
  545.                  When inlining Fortran subroutines, IPA tries to map formal
  546.                  array parameters to the shape of the actual parameter.
  547.                  However, it may not always be able to always map it. In the
  548.                  case that it can not map the parameter, it linearizes the
  549.                  array reference. By default, it will not inline such
  550.                  callsites since they may cause performance problems (default
  551.                  OOOOFFFFFFFF))))....
  552.  
  553.              GGGGffffaaaaccccttttoooorrrr====_n
  554.                  n is the percentage used to multiply the estimated External
  555.                  GOT entries with for estimating the total .got size. A n of
  556.                  200 means that IPA will multiply the estimated External GOT
  557.                  entries by 2 to get the estimated total .got size.  (default
  558.                  222200000000))))....
  559.  
  560.              ggggpppp____ppppaaaarrrrttttiiiittttiiiioooonnnn[====(OOOONNNN||||OOOOFFFFFFFF)]
  561.                  Enable partitioning for archiving different GP-groups, as
  562.                  specified by the user externally or determined by IPA
  563.                  internally.  This option basically enables PICOPT in the
  564.                  presence of -multigot.  (default OOOOFFFFFFFF).
  565.  
  566.              iiiinnnnlllliiiinnnneeee[====(OOOONNNN||||OOOOFFFFFFFF)]
  567.                  Perform inter-file subprogram inlining during main IPA
  568.                  processing (default OOOONNNN - does not affect the standalone
  569.                  inliner).
  570.  
  571.              IIIInnnnttttrrrriiiinnnnssssiiiiccccssss====_n
  572.                  n is the number of FORTRAN intrinsic functions that the
  573.                  executable may have entries in the GOT area.  This number is
  574.                  added to the estimated External GOT entries to get the
  575.                  estimated total FORTRAN intrinsic functions that will be
  576.                  added by the Lowerer after the IPA phase.
  577.  
  578.              kkkkeeeeeeeepppplllliiiigggghhhhtttt[====(OOOONNNN||||OOOOFFFFFFFF)]
  579.                  IPA NOT to send down "-keep" to the BE.  The purpose is to
  580.                  save space.  (default OOOOFFFFFFFF).
  581.  
  582.              mmmmaaaapppp____lllliiiimmmmiiiitttt====_n
  583.                  This controls when IPA should enable "sp_partition".   n is
  584.                  the maximum size (in bytes) of input files mapped before IPA
  585.                  does "sp_partition".
  586.  
  587.  
  588.  
  589.  
  590.  
  591.                                                                         PPPPaaaaggggeeee 9999
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  599.  
  600.  
  601.  
  602.              mmmmaaaaxxxxddddeeeepppptttthhhh====_n
  603.                  In addition to the default inlining heuristics, don't attempt
  604.                  to inline functions at a depth of more than _n in the
  605.                  callgraph, where functions which make no calls are at depth
  606.                  0, those which call only depth 0 functions are at depth 1,
  607.                  and so on.  Inlining remains subject to overriding limits on
  608.                  code expansion.  (See also ffffoooorrrrcccceeeeddddeeeepppptttthhhh, ssssppppaaaacccceeee and pppplllliiiimmmmiiiitttt.)
  609.  
  610.              mmmmaaaaxxxx____jjjjoooobbbb====_n
  611.                  Limit the maximum parallelism when invoking the compiler back
  612.                  end after IPA to at most _n compilations running at once
  613.                  (default 2 on a uniprocessor host, 4 on a multiprocessor
  614.                  host).
  615.  
  616.              ppppiiiiccccoooopppptttt[====(OOOONNNN||||OOOOFFFFFFFF)]
  617.                  Perform PIC optimizations, e.g. identify names which cannot
  618.                  be preempted (default OOOONNNN).
  619.  
  620.              ppppaaaarrrrttttiiiittttiiiioooonnnn____ggggrrrroooouuuupppp===={{{{ssssyyyymmmmbbbboooollll____nnnnaaaammmmeeee[[[[%%%%{{{{IIII||||GGGG}}}}]]]]||||ffffiiiilllleeee____nnnnaaaammmmeeee%%%%FFFF}}}}[[[[,,,,{{{{ssssyyyymmmmbbbboooollll____nnnnaaaammmmeeee[[[[%%%%{{{{IIII||||GGGG}}}}]]]]||||ffffiiiilllleeee____nnnn_a_m_e%_F}]*
  621.                  Specifying EXTERNAL symbols belonging to the same group.  All
  622.                  unspecified symbols will be considered by IPA as belonging to
  623.                  the "COMMON" group, which has the properties of always being
  624.                  in memory AND available for inlining.  Following the
  625.                  symbol_name, the user can specify the properties for that
  626.                  symbol by adding a '%' follows by the property wanted:
  627.                          I -- symbol is used ONLY within the partition.
  628.  
  629.                          G -- symbol should be marked as GP-relative, for DATA
  630.                          symbols only.
  631.                  Alternatively, the user can specify a gp_partition per file,
  632.                  as in
  633.                          partition_group=file_name%F
  634.                  Then every defined EXTERNAL symbols exist in that file will
  635.                  have the same group. file_name must be specified in the same
  636.                  way that the file is specified in the link-line, e.g.
  637.  
  638.                  cc
  639.                  -IPA:gp_partition=on:partition_group=/usr/tmp/p007.o%F:partition_group=./add.o%F
  640.                  /usr/tmp/p007.o ./add.o
  641.  
  642.              pppplllliiiimmmmiiiitttt====_n
  643.                  Stop inlining into a particular subprogram once it reaches
  644.                  size _n in the intermediate representation (default 2500).
  645.  
  646.              rrrreeeelllloooopppptttt[====(OOOONNNN||||OOOOFFFFFFFF)]
  647.                  Enable optimizations similar to the Ucode -O3 -c, where
  648.                  objects are built with the assumption that the compiled
  649.                  objects will be linked into a call-shared executable later.
  650.                  In effect, optimizations based on position-dependent code
  651.                  (non-PIC) are performed on those objects.  (default OOOOFFFFFFFF....))))
  652.  
  653.  
  654.  
  655.  
  656.  
  657.                                                                        PPPPaaaaggggeeee 11110000
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  665.  
  666.  
  667.  
  668.              ssssppppaaaacccceeee====_n
  669.                  Stop inlining once the program size has increased by _n%.  For
  670.                  example, _n=20 will limit code expansion due to inlining to
  671.                  approximately 20%.  (Default is 100%.)
  672.  
  673.              sssspppp____ppppaaaarrrrttttiiiittttiiiioooonnnn====[====(OOOONNNN||||OOOOFFFFFFFF)]
  674.                  Enable partitioning for disk/address-saving purpose.  Mainly
  675.                  used for building huge programs, e.g. PTC.  Partitioning
  676.                  should normally be done by IPA internally.  (default OOOOFFFFFFFF).
  677.  
  678.              ssssppppeeeeccccffffiiiilllleeee====_f_i_l_e__n_a_m_e
  679.                  Open ffffiiiilllleeee____nnnnaaaammmmeeee to read more options.  A specfile contains
  680.                  zero or more of the options allowed by -IPA.  E.g. on the
  681.                  command-line:
  682.                          -IPA:specfile=option_file
  683.                  and inside the file "option_file", the user can specify
  684.                  anything for -IPA as if it is specified in the command line,
  685.                  like:
  686.                          -
  687.                          IPA:gp_partition=on:partition_group=p007.o%F:partition_group=add.o%F
  688.                  Since "specfile=..." is not legal within a specfile, a
  689.                  specfile cannot point at other specfiles.
  690.  
  691.              uuuusssseeee____iiiinnnnttttrrrriiiinnnnssssiiiicccc[====(OOOONNNN||||OOOOFFFFFFFF)]
  692.                  Enable loading the intrinsic version of standard library
  693.                  functions.  (default OOOOFFFFFFFF).
  694.  
  695.  
  696. NNNNOOOOTTTTEEEESSSS
  697.      Both IPA and standalone inlining are disabled when -g is specified on the
  698.      compile line.
  699.  
  700.      For specifying routine names to the ----IIIINNNNLLLLIIIINNNNEEEE::::nnnneeeevvvveeeerrrr====_n_a_m_e and ----
  701.      IIIINNNNLLLLIIIINNNNEEEE::::mmmmuuuusssstttt====_n_a_m_e options for C++ programs, the "mangled" internal name
  702.      must be used.  Because C++ allows overloading, i.e. the use of the same
  703.      name for multiple objects which can be distinguished by type, it uses
  704.      internal names which are constructed from the original name and an
  705.      encoded version of the object's type.  To find this mangled name, do the
  706.      following (your input is in bbbboooollllddddffffaaaacccceeee):
  707.  
  708.      1)  Compile the source module where the name is defined, say:
  709.              > CCCCCCCC ----cccc ssssoooouuuurrrrcccceeee....ccccxxxxxxxx ----oooo ssssoooouuuurrrrcccceeee....oooo
  710.  
  711.      2)  Use the original name to find the mangled name in the object file
  712.          using nnnnmmmm((((1111)))) and ggggrrrreeeepppp((((1111)))).  For example, if the original name was
  713.          _m_y_s_u_b, use:
  714.              > nnnnmmmm ----BBBB ssssoooouuuurrrrcccceeee....oooo |||| ggggrrrreeeepppp mmmmyyyyssssuuuubbbb
  715.              0f89f950 T mysub__10yourclassFv
  716.              0f89facc T mysub__10myclassFv
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.                                                                        PPPPaaaaggggeeee 11111111
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. IIIIPPPPAAAA((((5555))))                                                                  IIIIPPPPAAAA((((5555))))
  731.  
  732.  
  733.  
  734.      3)  Step (2) might produce several potential matches, particularly if
  735.          overloading is actually occurring.  If so, use the filter cccc++++++++ffffiiiilllltttt to
  736.          determine which one is the one you want:
  737.              > ////uuuussssrrrr////lllliiiibbbb////cccc++++++++////cccc++++++++ffffiiiilllltttt
  738.              mmmmyyyyssssuuuubbbb________11110000mmmmyyyyccccllllaaaassssssssFFFFvvvv
  739.              myclass::mysub(void)
  740.          You can continue entering possible names from step (2) until one of
  741.          them matches the name you want.
  742.  
  743.  
  744.  
  745. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  746.      cc(1), f77(1), ld(1), dso(5)
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.                                                                        PPPPaaaaggggeeee 11112222
  790.  
  791.  
  792.  
  793.